//
// Created by 33145 on 2023/6/8.
//

#ifndef ROCKET_TINYPB_CODER_H
#define ROCKET_TINYPB_CODER_H

#include "tinypb_protocol.h"
#include "abstract_coder.h"
#include <vector>

namespace rocket {
  class TinyPBCoder : public AbstractCoder {

  public:
    typedef std::shared_ptr<TinyPBCoder> ptr;
    TinyPBCoder() = default;
    ~TinyPBCoder() override = default;

    // 将 message 对象转化为字节流，写入到 buffer
    void encode(std::vector<AbstractProtocol::ptr>& messages, TCPBuffer::ptr out_buffer) override;

    // 将 buffer 里面的字节流转换为 message 对象
    void decode(std::vector<AbstractProtocol::ptr>& out_messages, TCPBuffer::ptr buffer) override;


  private:
    const char* encodeTinyPB(const std::shared_ptr<TinyPBProtocol>& message, int& len);

  };
}


#endif //ROCKET_TINYPB_CODER_H
